#include "adc.h"
void adc_init(void)
{
	ADC_InitTypeDef ADC_InitStructure;
	GPIO_InitTypeDef GPIO_InitStructure;

	RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA | RCC_APB2Periph_ADC1, ENABLE); // 使能GPIOA和ADC1时钟
	RCC_ADCCLKConfig(RCC_PCLK2_Div4); // 设置ADC分频因子为4

	GPIO_InitStructure.GPIO_Pin = GPIO_Pin_0; // 配置PA0为模拟输入
	GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AIN;
	GPIO_Init(GPIOA, &GPIO_InitStructure);

	ADC_DeInit(ADC1); // 复位ADC1
	ADC_InitStructure.ADC_Mode = ADC_Mode_Independent; // 独立模式
	ADC_InitStructure.ADC_ScanConvMode = DISABLE; // 单通道模式
	ADC_InitStructure.ADC_ContinuousConvMode = DISABLE; // 单次转换模式
	ADC_InitStructure.ADC_ExternalTrigConv = ADC_ExternalTrigConv_None; // 软件触发
	ADC_InitStructure.ADC_DataAlign = ADC_DataAlign_Right; // 数据右对齐
	ADC_InitStructure.ADC_NbrOfChannel = 1; // 规则转换通道数目
	ADC_Init(ADC1, &ADC_InitStructure);

	ADC_Cmd(ADC1, ENABLE); // 使能ADC1
	ADC_ResetCalibration(ADC1); // 复位校准
	while (ADC_GetResetCalibrationStatus(ADC1)); // 等待复位校准结束
	ADC_StartCalibration(ADC1); // 开启校准
	while (ADC_GetCalibrationStatus(ADC1)); // 等待校准结束
}
unsigned short adc_getValue()
{
	ADC_RegularChannelConfig(ADC1, ADC_Channel_0, 1, ADC_SampleTime_239Cycles5); // 配置ADC通道
	ADC_SoftwareStartConvCmd(ADC1, ENABLE); // 启动转换
	while (!ADC_GetFlagStatus(ADC1, ADC_FLAG_EOC)); // 等待转换结束
	return ADC_GetConversionValue(ADC1); // 返回转换结果
}

